package asher.dotatbg.util;

import java.io.File;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 用于自动搜索service类的工具
 * 目前只查找程序内的类，忽略引用的jar包中的类
 * @author AsherYuan
 */
public class ClassFinder {

	/**
	 * 获取包下面的类
	 * @param list 空白List，用以保存查找到的类,list中的map中保存类名和对应的包名
	 * @param packName 目标查找包
	 * @param checkSubPackage 是否查找子包的类
	 * @return
	 * @throws Exception
	 */
	public static List<Map<String, String>> findClasses(List<Map<String, String>> list, String packName, boolean checkSubPackage) {
		String classpath = System.getProperty("java.class.path");
		String[] all = classpath.split(";");
		File file = new File(all[0] + "\\" + packName.replace('.', '\\'));
		if(file.exists() && file.isDirectory()) {
			File[] classes = file.listFiles();
			if(checkSubPackage) {
				for(File f : classes) {
					if(f.isDirectory()) {
						findClasses(list, packName + "." + f.getName(), true);
					} else {
						Map<String, String> map = new HashMap<String, String>();
						map.put("className", f.getName().replace(".class", ""));
						map.put("packageName", packName);
						list.add(map);
					}
				}
			} else {
				for(File f : classes) {
					if(f.isDirectory()) {
						continue;
					} else {
						Map<String, String> map = new HashMap<String, String>();
						map.put("className", f.getName().replace(".class", ""));
						map.put("packageName", packName);
						list.add(map);
					}
				}
			}
			
		}
		return list;
	}
	
}
